package chapter08;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: insight
 * @Description: 泛型类的继承规则
 * @LastDate: 2021/1/20
 */
public class Test07_InheritanceRules {
    public static void main(String[] args) {
        reason();
    }

    /**
     * 泛型类的继承关系和尖括号的参数无关 只和本身有关
     * 可以继承原始类型 或者 父类
     */
    public static void reason() {
        /*
         * 如果以下做法可以的话 那么父亲和孩子就变成同等级了 显然不行
         * 所以和参数化变量无关
         */
        /*var fa = new Pair<Father>();
        //err
        Pair<kid> kid = fa;
        kid.setFirst(new kid());*/

        /*
         * 继承原始类型
         * 但是存在风险 因为原始类型没有限定参数 所以可以添加任意类型的对象
         */
        var fa = new Pair();
        //work
        Pair<Kid> kid = fa;
        //添加任意对象
        //书上说only complile-time warning
        //为何我现在就报错了
        // kid.setFirst(new File(". . ."));

        /*
         * 父子类转换
         */
        List<Father> afa = new ArrayList<Father>();
        List<Kid> kids = new ArrayList<Kid>();
    }
}

class Father {
    int age;

    Father() {}

    public Father(int age) {
        this.age = age;
    }

    public int getAge() { return age; }
}
class Kid extends Father {
    Kid() {}

    public Kid(int age) {
        super(age);
    }
}
